package com.tianjs.reverse;


/**
 * 特别说明：该段代码虽然不优雅，但全部是徒手编写，并非面向百度编程，忘理解。
 * 模拟 String.split
 * 因为一个中文字符占2个字节，目前不支持中文字符的分隔翻转操作。
 * @author carrot.jiang
 * @date 2018年11月13日  新建
 */
public class App {
	public void reverse(String input,String seperator) {
		byte[] originalbytes = input.getBytes();
		byte[] seperatorbytes = seperator.getBytes();
		//获取分隔符的字节长度
		int seperatorLength = seperatorbytes.length;
		int originalLength = originalbytes.length;
		//获取单词个数
		int wordCount = 1; 
		for(int i=0;i<originalLength - seperatorLength;i++) {
			for(int j=0;j<seperatorLength;j++) {
				if(originalbytes[i+j]!=seperatorbytes[j]) {
					break;
				}
				if(j==seperatorLength-1) {
					wordCount = wordCount+1;
				}
			}
		}
		//生成单词数据
		Object[] word = new Object[wordCount];
		int n = 0;
		int m = 0; 
		byte[] wordByte = new byte[128];//此处不优雅，浪费空间，应该先计算每个单词的长度，但是复杂度太高就先这样吧。
		for(int i=0;i<originalLength;i++) {
			boolean flag = false;
			for(int j=0;j<seperatorLength;j++) {
				if(originalbytes[i+j]!=seperatorbytes[j]) {
					flag = true;
					break;
				}
				if(j==seperatorLength-1) {
					flag = false;
					i=i+seperatorLength-1;
				}
			}
			if(flag) {
				wordByte[m] = originalbytes[i];
				m++;
			}else {
				m=0;
				word[n] = wordByte;
//				System.out.println(new String(wordByte));
				n++;
				wordByte = new byte[128];
			}
			if(i==originalLength-1) {
				word[n] = wordByte;
//				System.out.println(new String(wordByte));
			}
		}
		for(int i=word.length-1;i>=0;i--) {
			if(i==0) {
				System.out.print(new String((byte[])word[i]).trim());
			} else {
				System.out.print(new String((byte[])word[i]).trim()+seperator);
			}
			
		}
	}
    public static void main( String[] args ){
    	App app = new App();
    	app.reverse("Hello  world  welcome  to  china  !","  ");
    	System.out.println();
    	app.reverse("qiang gui jiang"," ");
    	System.out.println();
    	app.reverse("qiang,gui,jiang",",");
    	System.out.println();
    	app.reverse("zhang|men|yi|dui|yi","|");
    }
}
